﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Recursos.Model;


namespace Recursos.View
{
    public partial class RservacionesViewModify : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            var userSecurity = ((Usuario)Session["UserLogged"]);
            if (userSecurity == null)
                Response.Redirect("~/NoAccess.aspx");
            var permisos = new PermisosModel();
            var user = permisos.obtenerRolUsuario(userSecurity.Cedula);
            if (!Page.IsPostBack && userSecurity != null && (user.Equals("Administrador") || user.Equals("Coordinador") || user.Equals("Profesor")))
                populateDropDown();

            else if (userSecurity == null || user.Equals("Operador"))
            {
                Response.Redirect("~/NoAccess.aspx");
            }
        }

        public void populateDropDown()
        {
            cargarModalidad();
            cargarSedes();
        }
        public void cargarModalidad()
        {
            
            var modalidad = new ModalidadModel();
            DropDownListModalidad.DataSource = modalidad.CargarModalidad();
            DropDownListModalidad.DataTextField = "Nombre";
            DropDownListModalidad.DataValueField = "id";
            DropDownListModalidad.DataBind();
        }
        public void cargarSedes()
        {

            var sede = new SedeModel();
            DropDownListSedes.DataSource = sede.CargarSedes();
            DropDownListSedes.DataTextField = "Nombre";
            DropDownListSedes.DataValueField = "id";
            DropDownListSedes.DataBind();
        }

        public void BindData()
        {
            var periodomodel = new PeriodoModel();
            var periodo = periodomodel.RetornarPeriodo(int.Parse(TextBoxaño.Text), int.Parse(DropDownListPeriodo.SelectedValue), int.Parse(DropDownListModalidad.SelectedValue));
            var reservacion = new RservacionModel();
            var reservaciones = reservacion.CargarReservaciones(periodo).Where(s=>s.Reservacion.Espacio.IdSede==int.Parse(DropDownListSedes.SelectedValue));
            GridView1.DataSource = reservaciones;
            GridView1.DataBind();

        }

        public void BindData2()
        {
            var periodomodel = new PeriodoModel();
            var periodo = periodomodel.RetornarPeriodo(int.Parse(TextBoxaño.Text), int.Parse(DropDownListPeriodo.SelectedValue), int.Parse(DropDownListModalidad.SelectedValue));
            
            var reservacion = new RservacionModel();
            var reservaciones = reservacion.CargarReservacionesParticulares(periodo).Where(s=>s.Reservacion.Espacio.IdSede==int.Parse(DropDownListSedes.SelectedValue));
            GridView2.DataSource = reservaciones;
            GridView2.DataBind();

        }


        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            var t = e.Row.RowType;

            if (t == DataControlRowType.DataRow)
            {
                if (this.GridView1.EditIndex >= 0 && e.Row.RowIndex == this.GridView1.EditIndex)
                {
                    var d2 = e.Row.FindControl("DropdownGrupo") as DropDownList;
                    var em2 = e.Row.DataItem as Grupo;
                    var grupos = new GrupoModel();
                    d2.DataSource = grupos.CargarGupo(1);
                    d2.DataBind();
                    d2.SelectedValue = GridView1.DataKeys[e.Row.RowIndex].Value.ToString();

                    var d3 = e.Row.FindControl("DropdownProfe") as DropDownList;
                    var em3 = e.Row.DataItem as Usuario;
                    var profes = new UsuarioModel();
                    d3.DataSource = profes.CargarProfesor();
                    d3.DataBind();
                    d3.SelectedValue = GridView1.DataKeys[e.Row.RowIndex].Value.ToString();

                    var d4 = e.Row.FindControl("DropdownEspacio") as DropDownList;
                    var em4 = e.Row.DataItem as Espacio;
                    var espacios = new EspacioModel();
                    d4.DataSource = espacios.CargarEspacios();
                    d4.DataBind();
                    d4.SelectedValue = GridView1.DataKeys[e.Row.RowIndex].Value.ToString();


                }
            }

        }

        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            e.Cancel = true;
            GridView1.EditIndex = -1;
            BindData();

        }

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            BindData();
        }

       

        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {

            var periodomodel = new PeriodoModel();
            var periodo = periodomodel.RetornarPeriodo(int.Parse(TextBoxaño.Text), int.Parse(DropDownListPeriodo.SelectedValue), int.Parse(DropDownListModalidad.SelectedValue));
            
            GridViewRow row = GridView1.Rows[e.RowIndex];
            var dplgrupo = (DropDownList)row.FindControl("DropdownGrupo");
            var dplprofe = (DropDownList)row.FindControl("DropdownProfe");
            var dplespacio = (DropDownList)row.FindControl("DropdownEspacio");
            var dplhorainicio = (DropDownList)row.FindControl("DropDownListHoraInicio");
            var dplhorafinal = (DropDownList)row.FindControl("DropDownListHoraFinal");
            var cblunes = (CheckBox)row.FindControl("cblunes");
            var cbmartes = (CheckBox)row.FindControl("cbmartes");
            var cbmiercoles = (CheckBox)row.FindControl("cbmiercoles");
            var cbjueves = (CheckBox)row.FindControl("cbjueves");
            var cbviernes = (CheckBox)row.FindControl("cbviernes");
            var cbsabado = (CheckBox)row.FindControl("cbsabado");
            string[] hinicio = dplhorainicio.SelectedValue.ToString().Split(':');
             string[] hfinal = dplhorafinal.SelectedValue.ToString().Split(':');
             int intinicio = int.Parse(hinicio[0] + hinicio[1]);
             int intfinal = int.Parse(hfinal[0] + hfinal[1]);

             if (intfinal < intinicio)
                 WebMsgBox.Show("La hora final debe ser mayor a la inicial", "Modificación de Reservaciones");
             else
             {
                 string dias = "";
                 if (cblunes.Checked == true)
                     dias += "L-";
                 if (cbmartes.Checked == true)
                     dias += "K-";
                 if (cbmiercoles.Checked == true)
                     dias += "M-";
                 if (cbjueves.Checked == true)
                     dias += "J-";
                 if (cbviernes.Checked == true)
                     dias += "V-";
                 if (cbsabado.Checked == true)
                     dias += "S-";
                 if (dias.Equals(""))
                 {
                     WebMsgBox.Show("Debe marcar al menos un día para la reservación", "Modificación de Reservaciones");
                     return;
                 }
                 string dia = dias.Remove(dias.Length - 1, 1);
                var reservacioncursoId = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());
                var grupo1 = int.Parse(dplgrupo.SelectedValue);
                var reservacion = new RservacionModel();
                var userSecurity = ((Usuario)Session["UserLogged"]);
                int cedula= userSecurity.Cedula;
                var efectuada=reservacion.ActualizarReservacion(dplhorainicio.SelectedItem.Text.ToString(),dplhorafinal.SelectedItem.Text.ToString(),dplespacio.SelectedItem.Text.ToString(),int.Parse(dplgrupo.SelectedValue),dia,int.Parse(dplprofe.SelectedValue),reservacioncursoId,periodo,cedula);
                GridView1.DataBind();
                if (efectuada == true)
                    WebMsgBox.Show("Reservación editada correctamente", "Modificación de Reservaciones");
                else
                    WebMsgBox.Show("No se realizo la actualización debido a choque de horarios o falta de permisos", "Modificación de Reservaciones");
                GridView1.EditIndex = -1;
                GridView2.EditIndex = -1;
                BindData();
                BindData2();
             }

        }

        protected void GridView2_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            e.Cancel = true;
            GridView2.EditIndex = -1;
            BindData2();

        }

        protected void gridView2_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            var t = e.Row.RowType;

            if (t == DataControlRowType.DataRow)
            {
                if (this.GridView2.EditIndex >= 0 && e.Row.RowIndex == this.GridView2.EditIndex)
                {
                    var d4 = e.Row.FindControl("DropdownEspacio") as DropDownList;
                    var em4 = e.Row.DataItem as Espacio;
                    var espacios = new EspacioModel();
                    d4.DataSource = espacios.CargarEspacios();
                    d4.DataBind();
                    d4.SelectedValue = GridView1.DataKeys[e.Row.RowIndex].Value.ToString();
                }
            }
        }

        protected void GridView2_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView2.EditIndex = e.NewEditIndex;
            BindData2();
        }

        protected void GridView2_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            
            var periodomodel = new PeriodoModel();
            var periodo = periodomodel.RetornarPeriodo(int.Parse(TextBoxaño.Text), int.Parse(DropDownListPeriodo.SelectedValue), int.Parse(DropDownListModalidad.SelectedValue));
            
            GridViewRow row = GridView2.Rows[e.RowIndex];
            var txtinstitucion = (TextBox)row.FindControl("institucion");
            var txtfechainicio = (TextBox)row.FindControl("TextBox1");
            var txtfechafinal = (TextBox)row.FindControl("TextBox2");
            var txtresponsable = (TextBox)row.FindControl("responsable");
            var txtdescripcion = (TextBox)row.FindControl("descripcion");
            var txtusuario = (TextBox)row.FindControl("usuario");
            var dplhorainicio = (DropDownList)row.FindControl("DropDownListHoraInicio");
            var dplhorafinal = (DropDownList)row.FindControl("DropDownListHoraFinal");
            var dplespacio = (DropDownList)row.FindControl("DropdownEspacio");
            var cblunes = (CheckBox)row.FindControl("cblunes");
            var cbmartes = (CheckBox)row.FindControl("cbmartes");
            var cbmiercoles = (CheckBox)row.FindControl("cbmiercoles");
            var cbjueves = (CheckBox)row.FindControl("cbjueves");
            var cbviernes = (CheckBox)row.FindControl("cbviernes");
            var cbsabado = (CheckBox)row.FindControl("cbsabado");
            string[] hinicio = dplhorainicio.SelectedValue.ToString().Split(':');
             string[] hfinal = dplhorafinal.SelectedValue.ToString().Split(':');
             int intinicio = int.Parse(hinicio[0] + hinicio[1]);
             int intfinal = int.Parse(hfinal[0] + hfinal[1]);
             if (dplespacio.SelectedValue == "")
                 return;
             if (intfinal < intinicio)
                 WebMsgBox.Show("La hora final debe ser mayor a la inicial", "Modificación de Reservaciones");
             else
             {
                 string dias = "";
                 if (txtfechainicio.Text == txtfechafinal.Text)
                     dias = letraDia(DateTime.Parse(txtfechainicio.Text));
                 else
                 {
                     
                     if (cblunes.Checked == true)
                         dias += "L-";
                     if (cbmartes.Checked == true)
                         dias += "K-";
                     if (cbmiercoles.Checked == true)
                         dias += "M-";
                     if (cbjueves.Checked == true)
                         dias += "J-";
                     if (cbviernes.Checked == true)
                         dias += "V-";
                     if (cbsabado.Checked == true)
                         dias += "S-";
                 }
                 if (dias.Equals(""))
                 {
                     WebMsgBox.Show("Debe marcar al menos un día para la reservación", "Modificación de Reservaciones");
                     return;
                 }
                 string dia = dias.Remove(dias.Length - 1, 1);
                 var reservacionparticularId = Int32.Parse(GridView2.DataKeys[e.RowIndex].Value.ToString());
                 var institucion1 = txtinstitucion.Text;
                 var responsable1 = txtresponsable.Text;
                 var descripcion1 = txtdescripcion.Text;
                 var usuario1 = txtusuario.Text;
                 var reservacion = new RservacionModel();
                 var userSecurity = ((Usuario)Session["UserLogged"]);
                 int cedula  = userSecurity.Cedula;
                 var resultado=reservacion.ActualizarReservacionParticular(reservacionparticularId, institucion1, responsable1, descripcion1, usuario1,dplhorainicio.SelectedItem.Text.ToString(),dplhorafinal.SelectedItem.Text.ToString(),dia,dplespacio.SelectedItem.Text.ToString(),txtfechainicio.Text,txtfechafinal.Text,periodo,cedula);
               //  reservacion.CargarReservacionesParticulares();
                 GridView2.DataBind();
                 if(resultado==true)
                     WebMsgBox.Show("Reservación editada correctamente", "Modificación de Reservaciones");
                 else
                     WebMsgBox.Show("No se realizo la actualización debido a choque de horarios o falta de permisos", "Modificación de Reservaciones");
                 GridView1.EditIndex = -1;
                 GridView2.EditIndex = -1;
                 BindData();
                 BindData2();
             }
        }
        string letraDia(DateTime fechaDespliegue)
        {
            switch (fechaDespliegue.DayOfWeek)
            {
                case DayOfWeek.Monday:
                    return "L-";
                case DayOfWeek.Tuesday:
                    return "K-";
                case DayOfWeek.Wednesday:
                    return "M-";
                case DayOfWeek.Thursday:
                    return "J-";
                case DayOfWeek.Friday:
                    return "V-";
                case DayOfWeek.Saturday:
                    return "S-";
                default:
                    return "";
            }
        }

        protected void GridView1_RowDeleting1(object sender, GridViewDeleteEventArgs e)
        {

            GridViewRow row = GridView1.Rows[e.RowIndex];
            var reservacioncursoId = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());

            var reservacion = new RservacionModel();
            var userSecurity = ((Usuario)Session["UserLogged"]);
            int cedula = userSecurity.Cedula;
            var efectuada=reservacion.EliminarReservacion(reservacioncursoId,cedula);
            GridView1.DataBind();
            if(efectuada==1)
                WebMsgBox.Show("Reservación eliminada correctamente", "Eliminar Reservaciones");
            else
                WebMsgBox.Show("No tiene los permisos para eliminar la reservación", "Eliminar Reservaciones");

            BindData2();
            BindData();
        }

        protected void GridView2_RowDeleting1(object sender, GridViewDeleteEventArgs e)
        {
            GridViewRow row = GridView2.Rows[e.RowIndex];
            var reservacionparticularId = Int32.Parse(GridView2.DataKeys[e.RowIndex].Value.ToString());
            var reservacion = new RservacionModel();
            var userSecurity = ((Usuario)Session["UserLogged"]);
            int cedula = userSecurity.Cedula;
            var efectuada=reservacion.EliminarReservacionParticular(reservacionparticularId,cedula);
            GridView2.DataBind();
            if (efectuada == 1)
                WebMsgBox.Show("Reservación eliminada correctamente", "Eliminar Reservaciones");
            else
                WebMsgBox.Show("No tiene los permisos para eliminar la reservación", "Eliminar Reservaciones");
            BindData2();
            BindData();
        }

        protected void ButtonBuscarReservaciones_Click(object sender, EventArgs e)
        {
            try
            {
                int.Parse(TextBoxaño.Text);
                var periodomodel = new PeriodoModel();
                var periodo = periodomodel.RetornarPeriodo(int.Parse(TextBoxaño.Text), int.Parse(DropDownListPeriodo.SelectedValue), int.Parse(DropDownListModalidad.SelectedValue));
                if (periodo == 0)
                    WebMsgBox.Show("Periodo inválido", "Buscar Reservaciones");
                else
                {
                    BindData();
                    BindData2();
                }
            }
            catch (Exception)
            {
                WebMsgBox.Show("Indique el año", "Buscar Reservaciones");
            }
        }
    }
}